﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;

namespace Zhaoxi.Industrial.Base
{
    public class CommandBase : ICommand
    {
        /// <summary>
        /// 这行代码声明了一个CanExecuteChanged事件，它遵循ICommand接口的要求。当命令的可执行状态发生变化时，这个事件会被触发，通知订阅了这个事件的监听者。
        /// </summary>
        public event EventHandler? CanExecuteChanged;


        /// <summary>
        /// 这个方法用于确定命令是否可以执行。在这个基类的实现中，它默认返回true，表示命令总是可以执行。在实际的应用中，你可能需要根据特定的条件来重写这个方法，以决定命令是否可用。
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public bool CanExecute(object? parameter)
        {
            return true;
        }

        /// <summary>
        /// 执行命令操作
        /// </summary>
        /// <param name="parameter"></param>
        public void Execute(object? parameter)
        {
            this.DoExecute?.Invoke(parameter);
        }

        /// <summary>
        /// 这个属性允许你为命令关联一个动作（Action），这个动作将在命令执行时被调用。
        /// </summary>
        public Action<object> DoExecute { get; set; }

        public CommandBase() { }
        public CommandBase(Action<object> action)
        {
            DoExecute = action;
        }
    }
}
